home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_b / 8queen.pas < prev    next >
Pascal/Delphi Source File  |  1995-04-22  |  2KB  |  1 lines

  1. program queens(inPUT,outPUT);type cl   = array[0..8] of integer;var  col:cl;     i, j, row, QUEEN,N, SOLN                         :integer;     PT, GO, DONE :BOOLEAN;#I D2:POS.Ifunction try(row, queen:integer; col: cl):boolean;  var i:integer;      tri:boolean;BEGIN  i := 1;  tri := true;     while (i <= queen-1) and tri do    begin     if col[i] = row then tri := false     else if (col[i] = row + queen - i)             or (col[i] = ROW - QUEEN + i) then tri := false;     i := i + 1    end;TRY := TRIEND;(***********)(* DISPLAY *)(***********)PROCEDURE DISPLAY(COL:CL; SOLN:INTEGER);  VAR I:INTEGER;BEGIN  WRITELN(CHR(125));  POSITION(20,2);  WRITELN('SOLUTION NUMBER: ',SOLN);  POSITION(2,0);  for i := 1 to 8 do    begin      writeln('*':col[i])    endend;(***************)(*  MAIN LOOP  *)(***************)begin  WRITELN(CHR(125));  WRITELN('SOLVING THE EIGHT QUEENS PROBLEM');  for j := 0 to 8 do      (* initialize the arrays *)      col[j] := 0;row := 1;queen := 1;col[queen] := 1;PT := FALSE;SOLN := 0;DONE := FALSE;WHILE NOT DONE DOBEGINwhile (queen <= 8) AND (QUEEN > 0) do  begin        while (ROW <= 8) and not PT do      begin       if try(row,queen,col) then         begin          col[queen] := row;          PT := true;         end       else row := row + 1      end;    if not PT     then begin          row := col[queen - 1] + 1;          queen := queen - 1         end    else begin          row := 1;          queen := queen + 1;          PT := false;         end  END;SOLN := SOLN + 1;IF QUEEN > 0THEN  DISPLAY(COL,SOLN)ELSE DONE := TRUE;N := 8;GO := FALSE;WHILE (NOT GO) AND (NOT DONE) DOIF COL[N] <> 8THEN   BEGIN   ROW := COL[N] + 1;   QUEEN := N;   GO := TRUE  ENDELSE N := N - 1END (* NOT DONE *)end.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>